package leetcode_900;

/**
 *@author 周杨
 *BuddyStrings_859 给定两个字符串 问能否交换一次两个位置的字符 使A等于B 不能不交换
 *describe:很常规 AC 47%
 *2018年11月4日 下午8:44:26
 */
public class BuddyStrings_859 {
	public static void main(String[] args) {
	
	}
	
	public boolean buddyStrings(String A, String B) {
		if(A.length()!=B.length())
			return false;
		int i=0;
		char []ca=A.toCharArray();
		char []cb=B.toCharArray();
		while(i<A.length()) {
			if(ca[i]!=cb[i]) {
				int j=i+1;
				while(j<A.length()&&!(ca[j]==cb[i]&&ca[j]!=cb[j])) ++j;
				if(j==A.length())
					return false;//没有找到可以匹配的
				char temp=ca[i];
				ca[i]=ca[j];
				ca[j]=temp;
				return new String(ca).equals(new String(cb));
			}
			++i;
		}
		//否则两者是相等的
		if(A.length()>26)
			return true;//必然有重复的可以交换
		int hash[]=new int[26];
		for(char c:ca) {
			if(hash[c-'a']==1)
				return true;
			hash[c-'a']=1;
		}
		return false;
    }
}
